package com.aluvfy.jdbc.utils;
import java.sql.*;
import java.util.ResourceBundle;

public class DbUtils {
    /* JDBC工具类
    *  为了减少代码的编写量，减少重复工作，可以对重复代码进行封装
    * 工具类中的构造方法一般是私有化的，因为工具类中的方法都是私有化的
    * 工具类为了方便编程，所以工具类中的方法都是直接采用“类名. ”的方法调用
    *  因此，不需要new对象
    * */
    private DbUtils(){}

    //静态变量
    private static String driver;
    private static String url;
    private static String user;
    private static String password;

    static {
        //读取属性配置文件
        ResourceBundle bundle = ResourceBundle.getBundle("com.aluvfy.jdbc.jdbc");
        driver = bundle.getString("driver");
        url = bundle.getString("url");
        user = bundle.getString("user");
        password = bundle.getString("password");
        // 对于整个应用程序来说，只需要注册一次驱动，所以选择类代码块，在类加载的时候执行
        // 静态代码块在类加载的时候执行，只执行一次
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    /*
    * 获取数据库连接*/
    public static Connection getConnection() throws SQLException {
        //实际上每一次调用getConnection方法，都会创建一个新的对象，效率比较低，后续会使用连接池进行操作
        Connection conn = DriverManager.getConnection(url, user, password);
        return conn;
    }

    public static void close(Connection conn, Statement stm, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        if (stm != null) {
            try {
                stm.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
